/**
 * 极简字段控制工具函数
 * 只需要3个核心方法，总共不到20行代码
 */
import type { IPropertyControls } from '/@/views/fileattachment/api/interface'

export class FieldController {
  private controls: Map<string, any> = new Map()
  private hasValidControls: boolean = false

  constructor(propertyControls: IPropertyControls = []) {
    // 安全检查：确保propertyControls是数组且不为空
    if (Array.isArray(propertyControls) && propertyControls.length > 0) {
      propertyControls.forEach(control => {
        // 安全检查：确保control存在且有Name属性
        if (control && control.Name) {
          this.controls.set(control.Name, control)
          this.hasValidControls = true
        }
      })
    }
  }

  // 检查字段是否显示
  show(fieldName: string): boolean {
    if (!fieldName) return true // 防止空字段名
    // 如果没有有效的PropertyControls数据，默认显示所有字段
    if (!this.hasValidControls) return true
    const control = this.controls.get(fieldName)
    return control?.IsVisible ?? true
  }

  // 检查字段是否可编辑
  edit(fieldName: string): boolean {
    if (!fieldName) return true // 防止空字段名
    // 如果没有有效的PropertyControls数据，默认禁用编辑（只读模式）
    if (!this.hasValidControls) return false
    const control = this.controls.get(fieldName)
    return control?.IsEditable ?? true
  }

  // 获取字段显示名
  label(fieldName: string): string {
    if (!fieldName) return '' // 防止空字段名
    const control = this.controls.get(fieldName)
    return control?.DisplayName ?? fieldName
  }
}
